Открытая платформа для создания заботливой квартиры
Это датчик, который принимает два состояния: включено или выключено, в результате обнаружения движения в помещении, при помощи анализа отраженного радиосигнала (доплеровский эффект). На улице такой датчик лучше не применять, поскольку там слишком много помех: деревья, птицы, домашние питомцы и т.п. Вместо этого используйте схему разработки датчика движения на основе ИК-приемника.
Итак, вам потребуются следующие компоненты:
Название | Назначение | Цена, руб. |
---|---|---|
BLE JDY-08 | Радиомодуль Bluetooth LE | 140 |
Arduino Pro Mini | Микроконтроллер для учета затраченной электроэнергии | 135 |
RCWL-0516 | Доплеровский датчик движения | 70 |
DC-DC 0.9 - 3.3V | DC-DC преобразователь | 65 |
Помимо того, что датчик интегрирован с инфраструктурой умного дома, его преимущества еще и в том, что он в три раза дешевле китайского датчика движения, его не нужно прикреплять к потолку или стене, его можно разместить в любом удобном месте, ведь он работает от батареек или пальчиковых аккумуляторов.
Чтобы датчик дольше проработал от двух элементов питания АА, рекомендуем удалить светодиоды с DC-DC преобразователя и микроконтроллера. Также с микроконтроллера лучше удалить стабилизатор.
Программирование
О том как настроить Arduino IDE и подключить микроконтроллер к ПК читайте в этой коротенькой инструкции. Для компиляции программы необходимо загрузить библиотеки и добавить их в Arduino IDE через меню Sketch - Install library:
#include <jdy8.h>
#include <LowPower.h>
#define SENSOR_PIN 2
#define BLE_VCC_PIN 11
#define BLE_RX 8
#define BLE_TX 7
#define BLE_RESET 9
volatile byte rcwlState = LOW;
void setup() {
JDY8 ble(BLE_RX, BLE_TX, BLE_RESET);
ble.configure("Motion-2");
pinMode(SENSOR_PIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), waitForRCWL, CHANGE);
waitForRCWL();
}
void loop() {
byte nowState = digitalRead(SENSOR_PIN);
if ( nowState != rcwlState ) {
rcwlState = nowState;
reportRCWLStateChanged(rcwlState);
}
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
}
void waitForRCWL() {
}
void reportRCWLStateChanged( byte state )
{
pinMode(BLE_VCC_PIN, OUTPUT);
digitalWrite(BLE_VCC_PIN, HIGH);
delay(1000);
JDY8 ble(BLE_RX, BLE_TX, BLE_RESET);
ble.setData(0, state, true);
pinMode(BLE_RX, INPUT);
pinMode(BLE_TX, INPUT);
LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF);
digitalWrite(BLE_VCC_PIN, LOW);
pinMode(BLE_VCC_PIN, INPUT);
}
Схема устройства
Настройка HASS
Файл: /config/configuration.yaml
binary_sensor:
- platform: cutecare
name: Motion detector
mac: 3c:a3:08:c6:82:10
Файл: /config/customize.yaml
binary_sensor.motion_detector:
friendly_name: Движение
В приложении вы сможете отслеживать изменение состояния датчика:
Автоматизация
Здесь приведен достаточно простой пример автоматизации, который включает свет на кухне при обнаружении движения и отключает его через 10 минут после последнего обнаруженного движения. Конечно, более реалистичный сценарий потребует некоторого усложнения.
Файл: /config/automations.yaml
- alias: Включить свет на кухне, если обнаружено движение
trigger:
platform: state
entity_id: binary_sensor.motion_detector
to: 'on'
action:
service: homeassistant.turn_on
entity_id: light.kitchen_light
- alias: Выключить свет на кухне через 10 минут после последнего движения
trigger:
platform: state
entity_id: binary_sensor.motion_detector
to: 'off'
for:
minutes: 10
action:
service: homeassistant.turn_off
entity_id: light.kitchen_light